/**
 * 兼容性配置
 */
if(!window.console){
    window.console = (function(){
        var c = {}; c.log = c.warn = c.debug = c.info = c.error = c.time = c.dir = c.profile
            = c.clear = c.exception = c.trace = c.assert = function(){};
        return c;
    })();
}

(function(global) {
	//避免重复初始化project对象
	if(global._project){
		return ;
	}
	//项目的基本配置信息
	global._project = global.project = {
		version : '0.0.1',
		//系统路径
		basePath : '/'
	} ;

	/**
	 * 基类
	 */
	global.project.base = {
		initialize : function() {
			this.initBasePath() ;
			this.initAjax() ;
		},
		//初始化项目根路径，在初始化类时调用
		initBasePath : function(){
			//由dom元素中获取项目路径
			project.basePath = $("#basePath").val() ;
		},
        initAjax : function(){
            //拦截jquery的ajax请求
            if( !$.ajax2 ){
                $.ajax2 = $.ajax ;
                $.ajax = function( url, options ) {
                    if ( typeof url === "object" ) {
                        options = url;
                        url = undefined;
                    }
                    //拦截已有的success函数
                    if( options.success ){
                        var oldSuccessFn = options.success ;
                        options.success = function(data){
                            //设置字段的默认值
                            if(data && !data.rows){
                                data.rows = [] ;
                            }
                            oldSuccessFn(data) ;
                        };
                    }

                    //格式化page请求参数
                    if( options && options.data && options.data.page && options.data.rows ){
                        options.data.pagenum = Number( options.data.page ) - 1 ;
                        options.data.pagesize = Number( options.data.rows ) ;
                    }

                    //调用query的ajax请求
                    $.ajax2(options) ;
                };
            }
            //ajax的默认的请求类型为POST
            $.ajaxSetup({
                type : "POST"
            }) ;
            //ajax请求，并处理后，绑定新加的dom
            $(document).ajaxComplete(function(event, xhr, settings) {
                switch (xhr.status) {
                    case 500 :{
                        this.errorHandler(xhr) ;
                        break;
                    }
                    case 401 :{
                        //如果是ajax的未授权请求，显示登录窗口
                        //project.dispatcher.fireEvent(project.events.showLoginWinEvent) ;
                        break;
                    }
                    default:
                        //this.datagridHandler(xhr) ;
                        this.initSelectList() ;
                        break;
                }

            }.bind(this));
        },
        errorHandler:function(xhr){
            var resp=eval( eval('('+xhr.responseText+')'))
            console.error("出错了",resp);
            alert(resp.message);

         }
        ,initSelectList : function(){
            $('body').find('select[url]').each(function(i, dom) {
                //检测是否已经加载列表
                var selectDom = $(dom) ;
                if(selectDom.data("hasLoadSelectList")){
                    return ;
                }

                var url = selectDom.attr('url') ;
                if( !url ){
                    return ;
                }

                var valuefield = selectDom.attr('valuefield') ;
                if(!valuefield){
                    valuefield = "id" ;
                }

                var namefield = selectDom.attr('namefield') ;
                if(!namefield){
                    namefield = "name" ;
                }

                //标识是否已经发送加载列表
                $(dom).data("hasLoadSelectList", 1) ;

                //发送查询请求
                jQuery.ajax({
                    url : url ,
                    success : function(result){
                        if(!result){
                            return ;
                        }
                        var selectedValue = String(selectDom.attr('objid')).trim() ;

                        //编辑查询结果数组
                        for (var i=0; i < result.length ; i++){
                            //当前记录
                            var item = result[i] ;

                            if(selectedValue && selectedValue==item[valuefield]){
                                selectDom.append('<option value="'+item[valuefield]+'" selected>'+item[namefield]+"</option>") ;
                            }else{
                                selectDom.append('<option value="'+item[valuefield]+' ">'+item[namefield]+"</option>") ;
                            }

                            //selectedValue，则默认设置为第一条记录
                            if(!selectedValue || selectedValue=='undefined'  || selectedValue.length<1){
                                selectedValue = item[valuefield] ;
                            }
                        }
                    }
                }) ;

            }) ;
        }
	};

    /**
	 * 对话框提示
     */
	global.project.dialog = {
        error : function(content){
            $.messager.alert('错误提示' , content , 'error');
        } ,
        /**
         * 消息提示成功提示框
         * @param content
         * @param callbackFn 点击按钮的回调函数
         */
        success : function(content , callbackFn){
            $.messager.alert('成功提醒' , content ,'info' , callbackFn);
        } ,
        /**
         * 延迟关闭
         * @param content
         * @param callbackFn
         * @param time
         */
        timerSuccess : function(content , callbackFn,time){
            time=time||1000;
            $.messager.alert('成功提醒' , content ,'info' , callbackFn);
            setTimeout(callbackFn,time)
        } ,
        /**
         * 消息确认提示框
         */
        question : function( content , okFn ){
            var currobj = this ;
            $.messager.confirm('确认提醒', content , function(r){
                if (r && okFn){
                    okFn.call( currobj ) ;
                }
            });
        } ,
        /**
         * 弹出面板
         */
        panel : function( title , content , params ) {
            var defaultParams = {
                title: title,
                width: 600,
                height: 400,
                resizable: true,
                closed: false,
                cache: false,
                modal: true,
                buttons: [
                    {
                        iconCls: 'icon-ok',
                        text: '确定',
                        handler: function () {
                            if(params.ok && String(typeof params.ok)=='function'){
                                params.ok( ) ;
                            }
                        }
                    },
                    {
                        iconCls: 'icon-cancel',
                        text: '取消',
                        handler: function () {
                            $dialog.dialog('destroy');
                        }
                    }
                ],
                //关闭使用强制销毁
                onBeforeClose : function(){
                    $dialog.dialog('destroy');
                }
            };

            //设置自定义的参数
            var params = $.extend(defaultParams, params) ;

            //显示弹框
            $dialog = $('<div>'+content+'</div>').dialog(params) ;

            //重新渲染当前对话框
            $.parser.parse( $dialog );

            //设置当前对话框
            if( !window.dialogs ){
                window.dialogs = {} ;
            }

            //保存弹框的索引
            window.dialogs[ params.id ] = $dialog ;

            return $dialog ;
        } ,

        /**
         * 关闭弹框
         */
        close : function(id){
            if( window.dialogs && window.dialogs[id] ){
                window.dialogs[id].dialog('destroy');
                return true ;
            }
            return false ;
        }
	} ;

    /**
	 * 详情类
     */
	global.project.details = {
        //对话框
        dialog : project.dialog ,

        /**
         * 获取form数据，返回key-value对
         */
        getFormData : function(formId){
            var data = {} ;
            //form存在性校验
            if(formId && formId.length>0 && $('#'+formId).length>0){
                var fields = $('#'+formId).serializeArray();
                $.each( fields, function(i, field){
					if(data[field.name]){
						data[field.name] = data[field.name] +','+ String(field.value).trim() ;
					}else{
						data[field.name] = String(field.value).trim() ;
					}
                });
            }

            return data ;
        },

        /**
         * 提取记录id
         * @param rows
         * @param idField
         */
        extractId : function(rows , idField){
            if( !idField ){
                idField = "id" ;
            }
            var ids = '' ;
            for( var i = 0 ; i < rows.length ; i++ ){
                var item = rows[i] ;
                if( ids.length > 0 ){
                    ids += ',' ;
                }
                ids += item[idField] ;
            }
            return ids ;
        },

        /**
         * 禁用所有可编辑区域
         */
        disableAllEditAreas:function(formId){
            var inputDoms = $('#'+formId).find("input[type!='button']") ;
            inputDoms.attr("readonly" , "readonly") ;
            inputDoms.attr("disabled" , "true") ;
            //下拉框只读
            var selectDoms = $('#'+formId).find("select") ;
            selectDoms.attr("disabled" , "true") ;
            //textarea区域设置只读
            var textareaDoms = $('#'+formId).find('textarea') ;
            textareaDoms.attr("readonly" , "readonly") ;
        } ,
        /**
         * 查询系统消息
         */
        queryDictionary : function(domId , code){
            //发送查询请求
            jQuery.ajax({
                url : '/dictionary/'+code ,
                success : function(result){
                    if(!result || !result.success){
                        return ;
                    }
                    var systemcodeDom = $('#'+domId) ;
                    var selectedKey = String(systemcodeDom.attr('objid')).trim() ;
                    for (var key in result.dictionary){
                        if(selectedKey && selectedKey==key){
                            systemcodeDom.append('<option value="'+key+'" selected>'+result.dictionary[key]+"</option>") ;
                        }else{
                            systemcodeDom.append('<option value="'+key+' ">'+result.dictionary[key]+"</option>") ;
                        }
                    }
                }
            }) ;
        },
        /**
         * 验证表单，验证成功后执行successHandler，验证失败后执行failHandler。
         */
        checkValidform : function(formId ,successHandler , failHandler){
            //获取表单验证对象
            var flag = $('#'+formId).form('enableValidation').form('validate') ;

            //执行表单验证
            if($('#'+formId).length > 0 && flag ){
                if(typeof successHandler=="function"){
                    //验证成功后执行成功回调函数
                    successHandler.call(this , this.getFormData(formId)) ;
                }
                return true ;
            }else {
                if(typeof failHandler=="function"){
                    //验证成功后执行成功回调函数
                    failHandler.call(this , this.getFormData(formId)) ;
                }
                return false ;
            }
        },
        /**
         * 关闭编辑视图
         */
        close : function(refreshParent){
            if( String(typeof refreshParent)=='undefined' || refreshParent ){
                console.log("来源tab的id = "+parent.getSourceTabId()) ;
                parent.refreshTab( {
                    // title : titile ,
                    _sid : parent.getSourceTabId()
                });
            }

            parent.closePanel() ;
        },
        /**
         * 打开新的tab
         */
        openTab : function ( title , url ) {
            parent.addPanel( title , url ) ;
        },
        /**
         * 初始化上传
         * @param options
         */
        initUploader : function(options , uploadOnSelect){
            options = options || {} ;
            uploadOnSelect = String(typeof uploadOnSelect)=='undefined' ? true : uploadOnSelect ;
            var mime_types = [] ;
            if( options.type && options.type == 'image' ){
                mime_types.push( {title : 'image files' , extensions : 'png,jpg,jpeg,bmp'} ) ;
            }

            var btnUploader = new plupload.Uploader({
                url : '/local/upload' ,
                flash_swf_url : '/resources/js/modules/uploader/2.1.8/Moxie.swf' ,
                browse_button: options.btn ,
                filters: {
                    mime_types : mime_types ,
                    //上传文件大小默认最大为10mb
                    max_file_size : options.maxSize || '10mb'  ,
                    //不允许一次选择多个文件
                    prevent_duplicates : true
                }
            }) ;
            btnUploader.init();

            if( uploadOnSelect ){
                btnUploader.bind('FilesAdded',function(uploader,files){
                    console.log("filesadd") ;
                    uploader.start() ;
                }) ;
            }

            if( options.FilesAdded ){
                btnUploader.bind( 'FilesAdded' , options.FilesAdded ) ;
            }

            if( options.FileUploaded ){
                btnUploader.bind( 'FileUploaded' , options.FileUploaded ) ;
            }

            return btnUploader ;
        }
	} ;

	//全局初始化
	window.project.base.initialize() ;

})(window) ;

/**
 * 构建实例对象
 * @param objInstance
 */
function buildDetail( globalName , objInstance ){
	if( window[globalName] ){
		console.log("已经存在全局的 "+globalName+" 对象") ;
        if( window[globalName].initDetails ){
            window[globalName].initDetails() ;
        }
        return ;
	}
	var target = {} ;
    jQuery.extend( true , target , project.details , objInstance ) ;
	//设置iframe父节点 和 当前页面的对象
    parent[globalName] = window[globalName] = target ;

    //如果包含initDetails则执行
    if( target.initDetails ){
        target.initDetails() ;
    }

}

